#include <x86intrin.h>
#include <stdio.h>

int main()
{
    alignas(32) double x[8] = {0, 1, 2, 3, 4, 5, 6, 7};
    alignas(32) double y[8] = {7, 6, 5, 4, 3, 2, 1, 0};
    alignas(32) double c1[8];
    alignas(32) double c2[8];
    alignas(32) double c3[8];
    __m256d m1 = _mm256_load_pd(x);
    __m256d m2 = _mm256_load_pd(y);

    // test1
    // __m256d m3 = _mm256_permute_pd(m1, 15);
    // __m256d m4 = _mm256_permute_pd(m2, 5);
    // __m256d m5 = m3 * m4;
    // // __m256d m6 = _mm256_permute_pd(my, 5);
    // _mm256_store_pd(c1, m3);
    // _mm256_store_pd(c2, m4);
    // _mm256_store_pd(c3, m5);
    // // _mm256_store_pd(y, my);

    // test2
    __m256d m3 = _mm256_addsub_pd(m1, m2);
    __m256d m4 = _mm256_subadd_pd(m1, m2);
    _mm256_store_pd(c1, m3);
    _mm256_store_pd(c2, m4);

    for (int i = 0; i < 8; i++) {
        printf("%6f ", c1[i]);
    }
    printf("\n");
    for (int i = 0; i < 8; i++) {
        printf("%6f ", c2[i]);
    }
    printf("\n");
    for (int i = 0; i < 8; i++) {
        printf("%6f ", c3[i]);
    }
    printf("\n");
}